package dao;

import java.util.List;
import javax.swing.JOptionPane;
import model.ComandaCabecalho;
import model.ComandaDetalhe;
import model.GenericoDAO;
import model.Produto;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import util.HibernateUtil;

public class ComandaDetalheDAO extends GenericoDAO{
    
    public List<ComandaDetalhe> getByCabecalho(ComandaCabecalho comandaCabecalho){
        Session s = HibernateUtil.getSessionFactory().openSession();
        
        Criteria crit = s.createCriteria(ComandaDetalhe.class); 
        crit.add(Restrictions.eq("id.comandaCabecalho", comandaCabecalho));       
        
        return crit.list();
    } 
    
    public boolean  Salvar(ComandaDetalhe comandaDetalhe){
        Session s = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {           
            tx = s.beginTransaction();
            
            Criteria crit = s.createCriteria(ComandaDetalhe.class);
            crit.add(Restrictions.eq("id.comandaCabecalho", comandaDetalhe.getComandaCabecalho()));
            crit.add(Restrictions.eq("id.produto", comandaDetalhe.getProduto()));
            
            ComandaDetalhe comandaDetalheUpdate = (ComandaDetalhe) crit.uniqueResult();
            if (comandaDetalheUpdate == null) {
                s.persist(comandaDetalhe);
            } else {
                comandaDetalheUpdate.setQuantidade(comandaDetalheUpdate.getQuantidade() + comandaDetalhe.getQuantidade());
                s.update(comandaDetalheUpdate);
            }
            
            tx.commit();            
            return true;
        } catch (HibernateException e) {
            JOptionPane.showMessageDialog(null, "Erro Salvar: "+e.getMessage());
            if (tx!=null){
                tx.rollback();
            }
            return false;
        } finally {
            s.close();
        }        
            
    }
    
}
